package class202205.demo25.demo25.HashBack;


import java.util.Objects;

class Person{
    public String ID;
    public Person (String ID){

    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return Objects.equals(ID, person.ID);
    }

    @Override
    public int hashCode() {
        return Objects.hash(ID);
    }

    @Override
    public String toString() {
        return "Person{" +
                "ID='" + ID + '\'' +
                '}';
    }
}

public class HashBack2<K,V> {

    static class Node<K,V>{
        public K key;
        public V val;

        public Node<K,V> next;

        public Node(K key,V val){
            this.key = key;
            this.val = val;
        }
    }
    public Node<K,V>[] array = (Node<K,V>[])new Node[10];
    public int usedSize;

    public void put(K key,V val){

        int hash = key.hashCode();
        int index = hash % array.length;
        //2、遍历这个下标的链表  是否有相同的key 有  需要更新val值的
        Node<K,V> cur = array[index];
        while (cur!=null){
            if (cur.key.equals(key)){
                cur.val = val;//更新  就结束了
                return;
            }
            cur = cur.next;
        }
        Node<K,V> node = new Node<K,V>(key, val);
        node.next = array[index];
        array[index] = node;
        this.usedSize++;
    }

    public V get(K key){
        int hash = key.hashCode();
        int index = hash % array.length;
        //2、遍历这个下标的链表  是否有相同的key 有  需要更新val值的
        Node<K,V> cur = array[index];
        while (cur!=null){
            if (cur.key.equals(key)){
                return cur.val;
            }
            cur = cur.next;
        }
        return null;
    }

    public static void main(String[] args) {
        Person person1 = new Person("123");
        Person person2 = new Person("123");

        HashBack2<Person,String> hashBack2 = new HashBack2<>();
        hashBack2.put(person1,"bit");
        System.out.println(hashBack2.get(person2));
    }



    public static void main1(String[] args) {
        Person person1 = new Person("123");
        Person person2 = new Person("123");

        System.out.println(person1.hashCode());
        System.out.println(person2.hashCode());
    }
}
